Repository navigation
[Other] setup: the SYCL setup on an integrated Arc (xe): native launcher, a RAM fit rule, no KV streaming - #2115
Open
andersson82 wants to merge 2 commits into
Open
andersson82 wants to merge 2 commits into
andersson82 wants to merge 2 commits into
Conversation
jielin99
added a commit
to jielin99/Strata-codex
that referenced
this pull request
Oct 13, 2026
…p reports The NPU plugin returns EXECUTION_DEVICES as the plain string "NPU" (CPU and GPU return a list), so the probe split it into ['N', 'P', 'U'] and rejected a valid placement. Wrap a string in a list first; a CPU fallback or an empty list still fails. Rerun on the laptop: the 64x64 FP32 MatMul passes on NPU (max abs error 4.9e-05). This only shows the NPU runs a small graph; it is not Strata on the NPU. The handoff doc gains the Ubuntu dev machine inventory (no NPU, 15 GiB RAM: no real model baseline possible there), the review of upstream PRs Niko1221#2079, Niko1221#2110, Niko1221#2114 and Niko1221#2115 against this branch, and the laptop's hardware and OpenVINO reports (Core Ultra 9 285H, Arc 140T, Intel AI Boost, 63.5 GiB). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
jielin99
added a commit
to jielin99/Strata-codex
that referenced
this pull request
Oct 13, 2026
probe_sycl.cpp reports, per SYCL device, what the native Windows engine (PR Niko1221#2079) gates on - ext_intel_free_memory and ext_oneapi_graph - plus host_unified_memory, memory sizes, the largest allocation, sub-group sizes and fp16/fp64, and runs one 32-wide sub-group kernel per GPU. Read-only, no large allocation. PROBE_SYCL.bat builds it with icx and runs it three ways (no switches, ZES_ENABLE_SYSMAN=1, plus UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1). Built with icpx 2025.3.2 (intel/oneapi-basekit image) and run on a UHD 730 over Level Zero: valid JSON, sub-group kernel ok in all three. There the iGPU reports ~270 MiB free with ~13 GiB MemAvailable, and no ext_oneapi_graph. The Windows build and the Arc 140T are not tested. The handoff doc records the laptop toolchain, the cherry-picked upstream PRs (Niko1221#2114, Niko1221#2110, Niko1221#2079; Niko1221#2115 left out), the setup test results and the probe run. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
andersson82
force-pushed
the
sycl-igpu-setup
branch
from
October 15, 2026 05:31
592d332 to
59a5ba8
Compare
Owner
|
Thanks for the pull request. We're resetting the tracker for 0.2.0-beta. There are more than 1,300 open issues and pull requests, too many for us to review properly, so we're closing everything that isn't being worked on right now. Closed here does not mean rejected. To reopen it takes about two minutes:
The rules are in CONTRIBUTING.md. |
Author
|
/reopen |
|
Reopened, thank you. A maintainer will pick it up from here. If it conflicts with main, rebase it first; that speeds up review. It has conflicts with main now: please rebase it. |
andersson82
force-pushed
the
sycl-igpu-setup
branch
from
October 22, 2026 07:42
59a5ba8 to
7265d6e
Compare
…/meminfo, no prompt-slot borrowing, a native launcher On the Arc 140T (Core Ultra 9 285H, 62 GiB, Fedora 44, xe, oneAPI 2026.0 on the PC) the engine did not start: the device has no ext_intel_free_memory (also with ZES_ENABLE_SYSMAN=1), so the expert cache was sized from 0. - sycl/include/dpct/device.hpp: get_memory_info on a device with host_unified_memory and no free-memory query reads MemAvailable from /proc/meminfo (Linux); STRATA_SYCL_FREE_MIB sets it by hand. Other devices: unchanged. - sycl/src/program/generate.cpp: no prompt-slot borrowing on a host_unified_memory device. With it the answer after a borrowing prompt was token 0 (expert activations NaN from the 2nd chunk; 0.1.40, any context). - sycl/serve/strata-sycl-native.sh (new): the config's exe for the engine on the PC's own oneAPI, no Docker. - docs/INTEL.md: "Integrated Arc: the Arc 140T"; docs/INTEL_ARC.md: the 140T is no longer "not tested". Measured on the 140T, Coder IQ1_M, engine 0.1.43 with Niko1221#2110, through the server: 12.0-17.4 tok/s decode on 100-token answers (all 12,288 experts cached), a 72,648-token prompt read at 156.5 tok/s with its first-line fact recalled. Built with sycl/tools/build.sh (native oneAPI): 0 errors. No discrete card was run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…AM fit rule, no KV streaming On an integrated GPU setup also leaves out the --ple-io ram its RAM rule chose from the 1024 GB stand-in (a user's own is kept), writes --stream-experts once when the config already had it, says Gyro sizes are not tested there in --check, and names the integrated GPU in the pictures-off line.
andersson82
force-pushed
the
sycl-igpu-setup
branch
from
October 23, 2026 10:24
7265d6e to
9f06dd4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem and result
./setup.sh --backend syclon a PC whose only Intel GPU is integrated (an Intel GPU at PCI00:02.0onxe) stopswith "no Intel Arc found". With this change it finds the GPU, checks that oneAPI and the engine build are on the PC,
offers the sizes that fit the RAM, and writes a config for
sycl/serve/strata-sycl-native.sh(no Docker). On the Arc140T with Strata 0.2.2 that config serves 10 of 10 requests (8.4-12.7 tok/s decode).
Depends on #2114 (the launcher and the iGPU memory query): until that one is merged this diff also shows its commit;
the change of this pull request is the last commit.
Related discussion
None agreed in an issue; it is the setup half of #2114 (platform support for an integrated Arc, which the maintainers
have no machine to gate). Rebased on 0.2.2 and re-run; rebased again on 0.2.3 on 2026-10-23 (one conflict, see the pictures bullet below).
Approach
sycl/setup_intel.py:intel_gpuslists the integrated GPU (onxe) with setup's unified-memory fields;i915_igpusfinds one oni915,for which setup stops and names the kernel command line that moves it to
xe.sycl_engine(igpu=True)also needs/opt/intel/oneapi/setvars.sh(orONEAPI_ROOT) and says how to build natively.to_sycl_igpu: the PC's paths, the launcher asexe,--stream-experts(written once, also when a hand-made configalready had it), no
--kv-resident(the KV is in the same RAM either way), the reserve as on a card (1,024 MiB up to32K, 2,048 above; a given one is kept),
SYCL_CACHE_PERSISTENT=1on the 140T only (it crashed on Xe2),STRATA_SYCL_BINfor an AOT build.--ple-io ramrule read the 1024 GB stand-inRAM the Intel path gives setup and wrote
--ple-io ram, which on a 62 GB iGPU would put the 29 GB n-gram table inthe GPU's own memory beside the 36.5 GiB expert file.
to_sycl_igpuleaves it out (one in the user'suser_argsiskept) and the "1024 GB of RAM" line is replaced by a plain one. Also: in
--check, Gyro sizes say they are not testedon an integrated GPU, and pictures stay off on an integrated GPU with a line that says why (see the next bullet).
xeid thatis not an Alchemist one (
is_b_series), which includes the 140T (7d51). On an integrated GPU setup instead keepspictures off unless
--visionis given ("nobody has run them on one yet (--vision yes turns them on)") and does notprint the B-series line. A card takes main's path unchanged. Main's test that no
--vision noneis left insetup_intel.pynow checks that the one left is in the integrated-GPU branch only.43.8 GiB did not run well). The size menu marks the sizes that need more and recommends the first that fits; a size
that does not fit is asked about (
--model X --yesinstalls it anyway);--checksays the same per model.tools/test_setup_sycl.py: 8 new tests (detection on xe and i915, the config, the fit rule, the persistent cache, thelauncher's binary path,
--ple-io,--stream-expertsonce).docs/INTEL.md: setup's bullet and a "With setup"paragraph in "Integrated Arc".
Compatibility: discrete cards are unchanged. Every new branch needs the GPU at
00:02.0, where a card behind a PCIe portnever is.
setup.pyis not touched.Validation
Revision for the tests: main 5c8dd32 (v0.2.3) + #2114 + this commit (2026-10-23). The runs on the 140T are from 2026-10-22 on
main 011c9e6 (v0.2.2) + #2114 + this commit. Hardware: Arc 140T (8086:7d51), Core Ultra 9 285H, 62 GiB RAM,
Fedora 44 (kernel 7.2.11,
xe), oneAPI 2026.0, Python 3.14.Passed:
python tools/test_setup_sycl.py: 33 of 33.tools/test_setup_*.pyon this branch (v0.2.3): 45 pass; for the other 3 see Failed../setup.sh --backend sycl --family coder --model IQ1_M --context 98304 --no-start --yes(run in a checkout whose
sycl/setup_intel.pyis this branch's) exit 0. Step 1 shows "Intel Arc 140T, shared memory:56 GB of the RAM usable by the GPU, xe driver" and "RAM: 62 GB (the integrated GPU's memory is this RAM)". Run twice
from the hand-made config of [Engine] sycl: run on an integrated Arc (Arc 140T, xe): free memory from /proc/meminfo, no prompt-slot borrowing, a native launcher #2114's docs: both wrote the same
args. These are that config's arguments plus setup's--pool-workers 10, with one--stream-expertsand no--ple-io.sycl/serve/server_intel.pywith engine 0.1.47 (+ [Engine] sycl: STRATA_WINDOW_SYNC=1 by default on an integrated GPU (Arc 140T: 6 of 6 requests stalled, 10 of 10 pass) #2110): 10 of 10 requests, 8.4-12.7 tok/s,0 stall reports. Without
--pool-workers8.5-13.3 tok/s, so that option makes no measurable difference here.Failed:
tools/test_setup_golden.py(48 failures) andtools/test_setup_unsloth.py(4 failures) fail with the same counts onmain 5c8dd32 without this branch (on 011c9e6 they were CUDA multi-GPU expectations, for example
cfg["gpu"][0, 1]vs
[1, 0]).tools/test_setup_download.pyis flaky on main too. On v0.2.3 it failed 5 of 6 runs on main 5c8dd32 and 5 of 8 on thisbranch (
test_a_killed_download_continuesand the twoNoRangeSupporttests; a SYCL build ran on the same PC duringmost of these runs). This branch does not touch the download code.
Not run:
./setup.shrun and the served requests on 0.2.3: they are from 0.2.2 (above).i915on real hardware (the message is unit-tested only), Windows.--model IQ1_M --yes).Limits
--ple-io ramrule on a discrete Intel card too, and
to_syclkeeps what setup wrote. That is a separate problem from this pullrequest and I did not change it.
--pool-workers 10here, and the engine warns the process can run only 10 CPU threads("Recommended: --pool-workers 9"). It made no measurable difference, so it is left as setup writes it.